package com.myGis.services;

import java.util.ArrayList;
import java.util.List;

import org.json.JSONArray;
import org.json.JSONObject;

import com.myGis.entities.Layer;
import com.myGis.entities.SimpleField;
import com.myGis.entities.ValueField;
import com.myGis.util.entities.GisEntity;

public class MyGisHelpersServices implements IMyGisHelpersServices {

	/**
	 * Layer: Representa un capa custom
	 * Se recibe una capa custom y retorna un arreglo JSon con el contenido que el usuario ha ido incorporando a dicha capa. 
	 */
	@Override
	public JSONArray layerCustomToJSon(Layer layer) {
		JSONArray  arrayJSon = new JSONArray();
		// La idea es devolver un JSONArray el cual va a ir creciendo en la medida que a la capa se le cargue informacion...
		// El Objeto JSON sera: {simpleFieldName, valueFieldValue, spatialObjectGeometry}, con esto considero porder dibujar la informacion en el front.
		List<ValueField> vfConcantList = new  ArrayList<ValueField>();
		List<SimpleField> sfList = layer.getSimpleFields();
		if(sfList.isEmpty()){
			return null;
		}
		vfConcantList = ((SimpleField)sfList.get(0)).getValueFields();
		//Lo que hago aca es iterar como tantos valueField tengamos para un Layer, luego, creo un jSON con el par Nombre SimpleFiel, Valor
		for(int i= 0; i < vfConcantList.size();i++){
			JSONObject itemCustomForm = new JSONObject();
			//JSONObject itemValueField = null;

			JSONObject gisEntity = new JSONObject();
			int campoTupla = 0;
			for(SimpleField sf : layer.getSimpleFields()){
				JSONObject jObject = new JSONObject();
				jObject.put("SimpleFielId", sf.getSimpleFieldId().toString());
				jObject.put("SimpleFielJSonKey", cleanSimpleFieldName(sf.getName()));
				jObject.put("SimpleFielName",sf.getName());
				jObject.put("SpatialObjectGeometry",sf.getValueFields().get(i).getSpatialObject().getGeometry());
				jObject.put("ValueFielId",sf.getValueFields().get(i).getValueFieldId().toString());
				jObject.put("ValueFielValue",sf.getValueFields().get(i).getValue());
				
				gisEntity.put("tupla"+Integer.toString(campoTupla), jObject);
				campoTupla++;
			}
			arrayJSon.put(i,gisEntity);
		}
		
		return arrayJSon;
	}

	/**
	 * 
	 * @param name
	 * @return
	 */
	private String cleanSimpleFieldName(String name) {
		return name.replace(" ", "");
	}
	
	

}
